package com.zbf.tspring.web;

import com.zbf.service.TestService00;
import com.zbf.tspring.service.TestService;
import com.zbf.tspring.service.TestService2;
import com.zbf.tspring.springEvent.MyEvent;
import com.zbf.tspring.springEvent.MyEvent2;
import com.zbf.tspring.springEvent.MyEventPublisher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * @author: LCG
 * 作者: LCG
 * 日期: 2021/3/22  8:43
 * 描述:
 */

@RestController
public class TestController {


    @Autowired
    private TestService00 testService00;

    @Autowired
    private ApplicationContext applicationContext;

    @Autowired
    private TestService testService;

    /**
     * 作者: LCG
     * 日期: 2021/3/22  8:44
     * 描述: 测试编程式事务
     * @Param []
     * @Return void
     */
    @RequestMapping("biancheng/{status}")
    public void test(@PathVariable Integer status){

        testService.test01(status);

    }


    @Autowired
    private TestService2 testService2;
    /**
     * 作者: LCG
     * 日期: 2021/3/22  9:16
     * 描述: 测试同一个类中间的事务的嵌套 行为（一个有事务的方法  嵌套一个没有事务的方法） 结果是 都会有事务
     * @Param [status]
     * @Return void
     */
    @RequestMapping("qiantao/{status}")
    public void test02(@PathVariable Integer status){

        testService2.test01(status);

    }


    /**
     * 作者: LCG
     * 日期: 2021/3/22  9:23
     * 描述: 测试同一个类中间的事务的嵌套 行为（一个没有事务的方法  嵌套一个有事务的方法） 结果是 都没有事务
     * @Param [status]
     * @Return void
     */
    @RequestMapping("qiantao2/{status}")
    public void test03(@PathVariable Integer status){

        testService2.test03(status);

    }

    /**
     * 作者: LCG
     * 日期: 2021/3/22  9:35
     * 描述: 测试  同一个类中  多个有事务的方法进行嵌套的 问题
     * @Param []
     * @Return void
     */
    @RequestMapping("qiantao3")
    public void test04(){

        testService2.test05();
    }



    private Logger logger=LoggerFactory.getLogger(TestController.class);

    @RequestMapping("log/{info}")
    public void testlog(@PathVariable String info){

        logger.info("===========日志信息===",info);

    }


    @RequestMapping("test000")
    public void test000(){

        applicationContext.getBean("");

        System.out.println(testService00.getName());

    }



    @RequestMapping("exception")
    public Object test001(String key){

        if(key==null){
            throw new RuntimeException("====错误信息888888====="+key);
        }

        return key;

    }


    @Autowired
    private MyEventPublisher myEventPublisher;

    /** 
     * @author: LCG
     * @date: 2022-04-16 16:04:30
     * @description:  测试Spring事件处理
     */
    @RequestMapping("event")
    public Object test008(){

        myEventPublisher.publishEvent(new MyEvent("123456789"));
        myEventPublisher.publishEvent(new MyEvent2("8888888888"));

        return "ok";
    }

}
